package com.example.memurbac_service.servicelmp;

import com.example.memurbac_service.dao.MemuMapper;
import com.example.memurbac_service.pojo.Memu;
import com.example.memurbac_service.pojo.Memu;
import com.example.memurbac_service.service.MemuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
public class MemuServicelmp implements MemuService
{
    /** 注入 mybaties mapper 接口*/
    @Autowired
    MemuMapper mapper;

    /**
     * 添加菜单
     */
    @Override
    public int addMemu(Memu memu) {
        return mapper.addMemu(memu);
    }

    /**
     * 修改菜单
     */
    @Override
    public int upteMemu(Memu memu) {
        return  mapper.upteMemu(memu);
    }

    /**
     * 停用菜单
     */
    @Override
    public int delMemu(int memuid) {
        return  mapper.delMemu(memuid);
    }

    /**
     * 模糊查询菜单 总查询
     */
    @Override
    public List<Memu> reachMemu(String typeid) {
        return mapper.reachMemu(typeid);
    }
    /**
     * 按照用户id信息查询菜单  树级
     */
    @Override
    public  List<Memu> reachbyuseridMemu(int userid) {
        //通过userid查询查询所有菜单类型id
        List<Integer> typeids=mapper.reachtypeidMemu(userid);
        //保存所有大菜单
        List<Memu> res= new ArrayList<>();
        //迭代使用类型id将对应的菜单返回
        for (Integer typeid : typeids) {
            //使用类型id获取对应用户的菜单 按照菜单级别正序
            List<Memu> memus= mapper.reachbyuseridMemu(userid,typeid);
            //判断菜单列表是否不为空
            if(!memus.isEmpty()){
              //做菜单的关系绑定
                //大菜单中最高等级的菜单,也是返回的菜单
                Memu root=memus.get(0);
                root.setChildMemu(compositeChildren(root.getId(), memus));
                res.add(root);
            }


        }
        return res;

    }


    public List<Memu> compositeChildren(Integer pid,List<Memu> allMemus){
        List<Memu> children = new ArrayList<>();
        // 找到下一层的子节点
        allMemus.forEach(e->{
            if(e.getMemu_parentid()==pid){
                children.add(e);
            }
        });
        // 子节点组装
        children.forEach(e->{
            e.setChildMemu(compositeChildren(e.getId(),allMemus));
        });
        // 递归退出点
        if(children.isEmpty()){
            return null;
        }
        return children;
    }
    /**
     * 按照菜单类型id查询整个菜单,开放给其他服务的接口   树级
     */
    @Override
    public Memu reachbytypeidMemu(int typeid) {
            //使用类型id获取对应用户的菜单 按照菜单级别正序
            List<Memu> memus= mapper.reachbytypeidMemu(typeid);
            //判断菜单列表是否不为空
            if(!memus.isEmpty()){
                //做菜单的关系绑定
                //大菜单中最高等级的菜单,也是返回的菜单
                Memu root=memus.get(0);
                root.setChildMemu(compositeChildren(root.getId(), memus));
                return root;
            }
        return null;
    }


    /**
     * 停用菜单类型
     */
    @Override
    public int offMemu(int Memuid) {
        return mapper.offMemu(Memuid);
    }
    /**
     * 启用菜单类型
     */
    @Override
    public int onMemu(int Memuid) {
        return mapper.onMemu(Memuid);
    }

    /**
     * 根据id查询菜单类型
     */
    @Override
    public Memu selectidMemu(int Memuid) {
        return mapper.selectidMemu(Memuid);
    }




}
